package com.mvc.controller;

import hbm.Proveedor;
import hbm.ProveedorDAO;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class ProveedorController extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
				request.getSession().setAttribute("listadoProveedores",
						listaProveedores);
				response.sendRedirect("./jsp/eliminarProveedor.jsp");
			} else {
				String idProveedor = request.getParameter("idProveedor");
				Proveedor proveedor = new Proveedor();
				proveedor.setId(Integer.parseInt(idProveedor));
				Session session = new ProveedorDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(proveedor);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoProveedor.jsp");
			}
		}

		if (opcion != null && opcion.equals("proveedor")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				String nombreProveedor = request.getParameter("txtnombre");
				String nitProveedor = request.getParameter("txtnit");
				String contactoProveedor = request.getParameter("txtcontacto");
				String telefonoProveedor = request.getParameter("txttelefono");

				Proveedor proveedor = new Proveedor();

				proveedor.setNombre(nombreProveedor);
				proveedor.setNit(nitProveedor);
				proveedor.setContacto(contactoProveedor);
				proveedor.setTelefono(telefonoProveedor);

				Session session = new ProveedorDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(proveedor);
				tx.commit();
				session.close();
				List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
				request.getSession().setAttribute("listadoProveedores",
						listaProveedores);
				response.sendRedirect("./jsp/mantenimientoProveedor.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new ProveedorDAO().getSession();
			List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
			request.getSession().setAttribute("listaProveedores",
					listaProveedores);
			session.close();
			response.sendRedirect("./jsp/mantenimientoProveedor.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
				request.getSession().setAttribute("listadoProveedores",
						listaProveedores);
				response.sendRedirect("./jsp/seleccionProveedor.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idProveedor = Integer.parseInt(request
					.getParameter("idProveedor"));
			Proveedor proveedorSeleccionada = new ProveedorDAO()
					.findById(idProveedor);
			request.getSession().setAttribute("idProveedorSeleccionado",
					proveedorSeleccionada.getId());
			request.getSession().setAttribute("nombreProveedorSeleccionada",
					proveedorSeleccionada.getNombre());
			request.getSession().setAttribute("nitProveedorSeleccionada",
					proveedorSeleccionada.getNombre());
			request.getSession().setAttribute("contactoProveedorSeleccionada",
					proveedorSeleccionada.getNombre());
			request.getSession().setAttribute("telefonoProveedorSeleccionada",
					proveedorSeleccionada.getNombre());
			response.sendRedirect("./jsp/editarProveedor.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Integer idProveedor = Integer.parseInt(request
						.getParameter("idProveedor"));
				String nombreProveedor = request.getParameter("txtnombre");
				String nitProveedor = request.getParameter("txtnit");
				String contactoProveedor = request.getParameter("txtcontacto");
				String telefonoProveedor = request.getParameter("txttelefono");

				Proveedor proveedorSeleccionada = new ProveedorDAO()
						.findById(idProveedor);
				proveedorSeleccionada.setNombre(nombreProveedor);
				proveedorSeleccionada.setNit(nitProveedor);
				proveedorSeleccionada.setContacto(contactoProveedor);
				proveedorSeleccionada.setTelefono(telefonoProveedor);
				Session session = new ProveedorDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(proveedorSeleccionada);
				tx.commit();
				session.close();
				List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
				request.getSession().setAttribute("listadoProveedores",
						listaProveedores);
				response.sendRedirect("./jsp/mantenimientoProveedor.jsp");
			}
		}
	}
}
